package chapter06

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test09_AbstractClass
 * Package: chapter06
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-22
 *          Time: 20:11
 */

object Test09_AbstractClass {
  def main(args: Array[String]): Unit = {
    val stu9 = new Stu9
    stu9.eat()
    stu9.sleep()
  }
}


//父类抽象类
abstract class Person9 {
  //非抽象属性
  //这里定义属性一定是val 常量 如果是变量 重写就没有意义 直接该不就行了吗(编译不报错)
  val name: String = "person"
  //抽象属性 没有初始化就是抽象的属性
  var age: Int
  //非抽象方法
  def eat():Unit={
    println("person eat")
  }
  //抽象方法 之申明 没有实现就是抽象方法
  def sleep():Unit
}

//定义具体的实现子类 要重写抽象的属性和方法
class Stu9 extends Person9{

  //抽象的叫 实现
  var age:Int = 19
  def sleep():Unit = {
    println("student sleep")
  }

  //非抽象的叫重写
  override val name: String = "student"

  override def eat(): Unit = {
    //super调用父类的
    super.eat()
    println("student eat")
  }

}